package org.example.xsda.vo;

import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 审批详情VO
 * 包含完整的审批信息、学生信息、历史审批意见等
 */
@Data
public class ApprovalDetailVO {
    
    /** 审批ID */
    private Long id;
    
    /** 学生ID */
    private Long studentId;
    
    /** 学号 */
    private String studentNo;
    
    /** 学生姓名 */
    private String studentName;
    
    /** 性别 */
    private String gender;
    
    /** 院系名称 */
    private String deptName;
    
    /** 班级名称 */
    private String className;
    
    /** 入学年份 */
    private Integer enrollYear;
    
    /** 当前学籍状态 */
    private Integer studentStatus;
    
    /** 学籍状态名称 */
    private String studentStatusName;
    
    /** 申请类型：1-学籍异动 2-信息修改 3-档案附件 */
    private Integer applyType;
    
    /** 申请类型名称 */
    private String applyTypeName;
    
    /** 子类型：suspension/transfer/return/dropout/info_modify/file_audit */
    private String subType;
    
    /** 子类型名称 */
    private String subTypeName;
    
    /** 申请内容 */
    private String content;
    
    /** 原值（JSON格式）*/
    private String oldValue;
    
    /** 新值（JSON格式）*/
    private String newValue;
    
    /** 附件列表 */
    private List<FileInfoVO> attachments;
    
    /** 目标班级ID */
    private Long targetClassId;
    
    /** 目标班级名称 */
    private String targetClassName;
    
    /** 目标院系ID */
    private Long targetDeptId;
    
    /** 目标院系名称 */
    private String targetDeptName;
    
    /** 开始日期 */
    private LocalDate startDate;
    
    /** 结束日期 */
    private LocalDate endDate;
    
    /** 当前审批层级：1-班主任初审 2-教务处终审 */
    private Integer approvalLevel;
    
    /** 审批层级名称 */
    private String approvalLevelName;
    
    /** 当前审批人ID */
    private Long currentApproverId;
    
    /** 当前审批人姓名 */
    private String currentApproverName;
    
    /** 历史审批意见 */
    private List<ApprovalOpinion> historyOpinions;
    
    /** 优先级：0-普通 1-重要 2-紧急 */
    private Integer priority;
    
    /** 优先级名称 */
    private String priorityName;
    
    /** 状态：0-待审批 1-已通过 2-已拒绝 */
    private Integer status;
    
    /** 状态名称 */
    private String statusName;
    
    /** 当前审批意见 */
    private String remark;
    
    /** 申请时间 */
    private LocalDateTime applyTime;
    
    /** 审批完成时间 */
    private LocalDateTime approveTime;
    
    /** 最终审批人姓名 */
    private String approverName;
    
    /** 创建时间 */
    private LocalDateTime createTime;
    
    /**
     * 历史审批意见内部类
     */
    @Data
    public static class ApprovalOpinion {
        /** 审批层级 */
        private Integer level;
        
        /** 审批层级名称 */
        private String levelName;
        
        /** 审批人姓名 */
        private String approverName;
        
        /** 审批操作：1-同意 2-拒绝 3-转交 */
        private Integer action;
        
        /** 操作名称 */
        private String actionName;
        
        /** 审批意见 */
        private String opinion;
        
        /** 审批时间 */
        private LocalDateTime approveTime;
    }
}

